/* Autore: Nicola Agosti */
/*
Si scriva un programma in linguaggio C che permetta all'utente di selezionare tramite un menų
la funzione desiderata. Il programma deve eseguire la funzione richiesta e poi riproporre il menų
all'utente in modo che possa scegliere se eseguire un altra funzione o terminare il programma.

Funzioni implementate:
 - Disegna un rettangolo pieno date base e altezza (carattere da utilizzare: "#");
 - Disegna una cornice rettangolare date base e altezza (caratteri da utilizzare: "-" per le basi e "|" per l'altezza);
 - Disegna un triangolo rettangolo isoscele dato il cateto (carattere da utilizzare: "+").

 N.B. tutte le misure sono numeri interi.
*/

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main()
{
	/* Dichiarazione delle variabili */
	int scelta = -1, base, altezza, cateto, i, j;

	/* Inserisco il menų in un ciclo while in modo che venga ripetuto
	finchč l'utente non inserisce il valore 0 che corrisponde alla voce di 
	menų "Esci" */
	while (scelta != 0)
	{
		/* Visualizzo il menų */
		printf("MENU\'");
		printf("\n 1) Disegna un rettangolo");
		printf("\n 2) Disegna una cornice rettangolare");
		printf("\n 3) Disegna un triangolo rettangolo isoscele");
		printf("\n 0) Esci");
		printf("\nInserisci la tua scelta: ");
		scanf("%d", &scelta);

		/* Valuto la scelta fatta dall'utente */
		switch (scelta)
		{
		case 0: /* Esci */
			break;

		case 1: /* Disegna un rettangolo */

			/* Dati */
			printf("\nInserisci la base del rettangolo: ");
			scanf("%d", &base);
			printf("Inserisci l'altezza del rettangolo: ");
			scanf("%d", &altezza);

			/*** Disegno il rettangolo ***/
			
			/* Inserisco un po' di spazio prima di disegnare il rettangolo */
			printf("\n\n");

			/* Il ciclo pių esterno si occupa di contare le righe */
			i = 0; /* Il contatore deve essere inizializzato prima di poter iniziare a contare!!! */
			while (i < altezza)
			{
				/* Il ciclo pių interno si occupa di contare i simboli all'interno della riga */
				j = 0; /* Il contatore deve essere inizializzato prima di poter iniziare a contare!!! */
				while (j < base)
				{
					/* Disegno un segmento della riga */
					printf("#");

					/* Ho disegnato un nuovo segmento... incremento il contatore "j" */
					j = j + 1;
				}

				/* Riga terminata...  vado a capo! */
				printf("\n");

				/* Ho disegnato una nuova riga... incremento il contatore "i" */
				i = i + 1;
			}

			break;

		case 2: /* Disegna una cornice rettangolare */

			/* Dati */
			printf("\nInserisci la base della cornice rettangolare: ");
			scanf("%d", &base);
			printf("Inserisci l'altezza della cornice rettangolare: ");
			scanf("%d", &altezza);

			/*** Disegno la cornice rettangolare ***/

			/* Inserisco un po' di spazio prima di disegnare la cornice rettangolare */
			printf("\n\n");

			/* Il ciclo pių esterno si occupa di contare le righe */
			i = 0; /* Il contatore deve essere inizializzato prima di poter iniziare a contare!!! */
			while (i < altezza)
			{
				/* Il ciclo pių interno si occupa di contare i simboli all'interno della riga */
				j = 0; /* Il contatore deve essere inizializzato prima di poter iniziare a contare!!! */
				while (j < base)
				{
					/* Controllo se sto disegnando le basi */
					if (i == 0 || i == altezza - 1)
					{
						/* Disegno i segmenti delle basi con il carattere "-" */
						printf("-");
					}
					else
					{
						/* Disegno le righe intermedie => utilizzo il carattere "|" per i bordi e lo spazio " " per i vuoti */
						if (j == 0 || j == base - 1)
						{
							/* Disegno i segmenti dei bordi con il carattere "|" */
							printf("|");
						}
						else
						{
							/* Disegno i vuoti con il carattere " " */
							printf(" ");
						}
					}

					/* Ho disegnato un nuovo segmento... incremento il contatore "j" */
					j = j + 1;
				}

				/* Riga terminata...  vado a capo! */
				printf("\n");

				/* Ho disegnato una nuova riga... incremento il contatore "i" */
				i = i + 1;
			}

			break;

		case 3: /* Disegna un triangolo rettangolo isoscele */

			/* Dati */
			printf("\nInserisci il cateto del triangolo rettangolo isoscele: ");
			scanf("%d", &cateto);

			/*** Disegno il triangolo rettangolo isoscele ***/

			/* Inserisco un po' di spazio prima di disegnare il rettangolo */
			printf("\n\n");

			/* Il ciclo pių esterno si occupa di contare le righe */
			i = 0; /* Il contatore deve essere inizializzato prima di poter iniziare a contare!!! */
			while (i < cateto)
			{
				/* Il ciclo pių interno si occupa di contare i simboli all'interno della riga */
				/* ATTENZIONE: in questo caso il numero di simboli all'interno delle righe č variabile!!! */
				j = 0; /* Il contatore deve essere inizializzato prima di poter iniziare a contare!!! */
				while (j < i + 1)
				{
					/* Disegno un segmento della riga */
					printf("+");

					/* Ho disegnato un nuovo segmento... incremento il contatore "j" */
					j = j + 1;
				}

				/* Riga terminata...  vado a capo! */
				printf("\n");

				/* Ho disegnato una nuova riga... incremento il contatore "i" */
				i = i + 1;
			}
			
			break;

		default: /* Errore */
			printf("\nERRORE: scelta non valida!\n");
		}

		/* Inserisco un po' di spazio prima di visualizzare nuovamente il menų */
		printf("\n\n"); 
	}

	return 0;
}